import java.util.ArrayList;

class Parking {
	//Atributos
	private ArrayList<Vehiculo> listaVehiculo = new ArrayList<Vehiculo>();
	private int capacidad;
	
	//Constructores
	public Parking(){}

	public Parking(int capacidad) {
		this.capacidad = capacidad;
	}
	
	//Metodos
	public boolean estaCompleto(){
		if (listaVehiculo.size() == capacidad){
			return true;
		}
		else {
			return false;
		}
	}
	
	public boolean estaVacio(){
		if (listaVehiculo.size() == 0){
			return true;
		}
		else {
			return false;
		}
	}
	
	private int buscarMatricula(String matricula) {
		int posicion = -1;
		
		for (int i = 0 ; i < listaVehiculo.size() ; i++){
			if (matricula.equals(listaVehiculo.get(i).getMatricula())){
				posicion = i;
				break;
			}
		}
		
		return posicion;
	}
	
	public void meter(Vehiculo v){
		listaVehiculo.add(v);
	}
	
	public void borrar(String matricula){
		int posicion = buscarMatricula(matricula);
		
		if(posicion != -1) {	
			listaVehiculo.remove(posicion);
			System.out.println("***Vehiculo eliminado***");
		}
		else {
			System.out.println("Esa matricula no corresponde a ningun vehiculo del parking");
		}
	}
	
	public void mostrar(String matricula){
		int posicion = buscarMatricula(matricula);
		
		if(posicion != -1) {	
				listaVehiculo.get(posicion).mostrarEstado();	
		}
		else {
			System.out.println("Esa matricula no corresponde a ningun vehiculo del parking");
				
		}
	}
	
	public void calcular(String matricula){
		long instanteSalida, tiempoTranscurrido, horas;
		long importe = 0;
		int posicion = buscarMatricula(matricula);
		
		if(posicion != -1) {		
			instanteSalida = System.currentTimeMillis() + 10800000;
			tiempoTranscurrido = instanteSalida - listaVehiculo.get(posicion).getInstanteEntrada();
			horas = tiempoTranscurrido / 3600000;	//Los milisegundos los paso a horas.
			
			
			if (tiempoTranscurrido % 3600000 >  0){
				horas++;
			}
			
			if (listaVehiculo.get(posicion) instanceof Coche){
				importe = 2 * horas;
			}
			else if (listaVehiculo.get(posicion) instanceof Moto){
				 
				 if (((Moto)listaVehiculo.get(posicion)).mirarSidecar()){
					 importe = 2 * horas;
				 }
				 else {
					 importe = 1 * horas;
				 }
			}
			else if (listaVehiculo.get(posicion) instanceof Camion){
				if(((Camion)listaVehiculo.get(posicion)).getTara() < 3500){
					importe = 4 * horas;
				}
				else if (((Camion)listaVehiculo.get(posicion)).getTara() >= 3500){
					importe = 6 * horas;
				}
			}
	
			System.out.println("Tipo de vehiculo: " + listaVehiculo.get(posicion).getClass().getName()
	  			   		       + " -> Horas: " + horas + " -> Importe: " + importe + " euros");
			
		}
		else {
			System.out.println("Esa matricula no corresponde a ningun vehiculo del parking");	
		}
	}
	
	public void listarTodo(){
		for (int i = 0 ; i < listaVehiculo.size() ; i ++){
			//La siguiente linea muestra que tipo de vehiculo es.
			System.out.println();
			System.out.println("Tipo de vehiculo: " + listaVehiculo.get(i).getClass().getName());
			listaVehiculo.get(i).mostrarEstado();
			
		}
	}
	
	

}
